// pages/objectCopy/objectCopy.js
Page({

    /**
     * 页面的初始数据
     */
    data: {

    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {

    },


    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {
        var self = this;
        //1.浅拷贝： 将原对象或原数组的引用直接赋给新对象，新数组，新对象／数组只是原对象的一个引用
        // 2.深拷贝： 创建一个新的对象和数组，将原对象的各项属性的“值”（数组的所有元素）拷贝过来，是“值”而不是“引用”
        self.jsonCopyTest();
        self.forCopyTest();
    },


    jsonCopyTest() {
        var self = this;
        var array = [
            { number: 1 },
            { number: 2 },
            { number: 3 }
        ];
        var newArray = self.jsonCopy(array);
        newArray[0].number = 11;
        console.log(newArray[0].number);//11
        console.log(array[0].number);//1
    },

    //对象深拷贝_json序列号
    jsonCopy(obj) {
        //转换成字符串再解析，就不会拷贝对应的地址指针
        var newArray = JSON.parse(JSON.stringify(obj));
        return newArray;
    },

    //对象深拷贝_for循环递归
    forCopyTest() {
        var self = this;
        var array = [
            { number: 1 },
            { number: 2 },
            { number: 3 }
        ];
        var copyArray = self.forCopy(array);
        copyArray[0].number = 100;
        console.log(copyArray[0].number); //100
        console.log(array[0].number); //1
    },

    //对象深拷贝_for循环递归
    forCopy(obj) {
        function copy(obj) {
            var newobj = obj.constructor === Array ? [] : {};
            //判断是否是对象类型
            if (typeof obj !== 'object') {
                return;
            }
            //for...in遍历对象
            for (var i in obj) {
                // 判断当前i还是不是对象 ? 1遍历出来的还是个子对象，递归调用复制方法 : 2是基础类型，就直接赋值
                newobj[i] = typeof obj[i] === 'object' ? copy(obj[i]) : obj[i];
            }
            return newobj;
        }
        var copyArray = copy(obj)
        return copyArray;
    },
})